このページは私用WordPressの覚え書き兼、テストページです。
「SNSボタン」は、テスト検証用に仮設置しているだけなので、押しても反応しません。

014_2カスタム投稿の「カテゴリー」と「タグ」を表示するようにする

「カスタム投稿」を作るにプラス、覚書メモ


「通常投稿」には、「カテゴリー」と「タグ」の仕様が標準についてますが、
自作で「カスタム投稿」を作った場合は、自分で定義を追加しないと「カテゴリー」も「タグ」も使えるようにはなっていないです。

いちいち設定しないと「存在しない」というのはなにかと不便ですが、これも wordpress の仕組みを理解する上でも大事なことかな、と思って設定したいと思います。


「カテゴリー」「タグ」も、実は「タクソノミー」

調べてみると、
どうやら「カテゴリー」と「タグ」は、両方とも同じ「タクソノミー(訳すと=分類)」という言葉で定義するようです。

設定では 'hierarchical' という部分を true にするか、false にするか、の違いだけのようです。

trueだと=カテゴリー になり、
false だと=タグ になります。


「カスタム投稿」に「カテゴリー」と「タグ」を設定する

functions.php に下記を追記します

もちろん、「カスタム投稿」を複数作った場合は、それぞれに設定が必要です。
下記↓はひとつ分です。(一例として「イラスト」のカスタム投稿)

    //カテゴリータイプ
    $args = array(
        'label' => 'カテゴリー',
        'public' => true,
        'show_ui' => true,
        'hierarchical' => true
    );
    register_taxonomy('illust_category','illust',$args);
     //タグタイプ
    $args = array(
        'label' => 'タグ',
        'public' => true,
        'show_ui' => true,
        'hierarchical' => false
    );
    register_taxonomy('illust_tag','illust',$args);


実際に追記したのが下記です。(functions.php に追記する)

(26行目~41行目)
   ↓

<?php
//カスタム投稿生成
add_action('init', 'my_custom_post_type'); //WordPressの読み込みが完了し、ヘッダーが送信される前にmy_custom_post_typeをフック
function my_custom_post_type() {

    $labels = array(
        'name' => 'イラスト', //投稿タイプの一般名
        'add_new_item' => '新規イラストを追加',
        'not_found' =>  __('イラストは見つかりませんでした'), //投稿がない場合の管理画面のカスタム投稿タイプ一覧に表示されるテキスト
        'new_item' => __('新しいイラスト'), //編集画面のタイトル
        'view_item' => __('イラストを表示') //記事編集画面の「プレビュー」のテキスト
    );
    $args = array(
        'labels' => $labels, //この投稿タイプのラベルの配列
        'public' => true, //publicly_queriable, show_ui, show_in_nav_menus, exclude_from_searchのデフォルト値を定義するメタ引数
        'publicly_queryable' => true, //フロントエンドで post_type クエリが実行可能かどうか
        'show_ui' => true, //この投稿タイプを管理するデフォルト UI を生成するかどうか
        'exclude_from_search' => false, //この投稿タイプを検索結果から除外するかどうか
        'capability_type' => 'post', //投稿タイプの閲覧/編集/削除権限をチェックするのに使用。初期値: "post"
        'rewrite' => true, //このフォーマットでパーマリンクをリライトする
        'hierarchical' => false, //この投稿タイプが階層(親の指定が許可されている)かどうか
        'menu_position' => 5, //投稿タイプが表示される管理画面のメニューの位置
        'supports' => array('title','editor','thumbnail', 'excerpt','comments','trackbacks') //add_post_type_support()を直接呼び出すエイリアス
    );
    register_post_type('illust',$args); //カスタム投稿タイプとその動作を定義する設定名(single.phpに追加する名前でもある)
    //カテゴリータイプ
    $args = array(
        'label' => 'カテゴリー',
        'public' => true,
        'show_ui' => true,
        'hierarchical' => true
    );
    register_taxonomy('illust_category','illust',$args);
     //タグタイプ
    $args = array(
        'label' => 'タグ',
        'public' => true,
        'show_ui' => true,
        'hierarchical' => false
    );
    register_taxonomy('illust_tag','illust',$args);




    $labels = array(
        'name' => 'comic', //投稿タイプの一般名

//以下略

}
?>

作った「カスタム投稿」の数分だけ追記します。


パーマリンクを空更新

カスタム投稿を作った時と同じく
functions.php に追記して保存した後、メニュー → 設定 → パーマリンクを、空更新しておきました。


記事を投稿してみる

これで、管理画面上で、「カスタム投稿」の「カテゴリー(と表示名をつけたタクソノミー)」と、同じく「タグ(と表示名をつけたタクソノミー)」ができました。
さっそく記事を投稿して、試しにタグを入力してみたいと思います。

入力したものの、プレビューしても出てこない

しかし、タグを入力後、プレビューしてみても、タグが表示されません・・・

これは、テンプレート(single-xxx.php)の中に、「タクソノミーを表示する」というコードを、まだ書いてないからです。


「カスタム投稿」の「カテゴリー」と「タグ」を出力させるには

いろいろぐぐって、試してみた結果、
下記のように書けば、「カテゴリー(タクソノミー)」と「タグ(同じくタクソノミー)」の文字が表示できるようになりました。

1~6行目が「カテゴリー」、7~12行目が「タグ」)
    ↓

<?php
$taxolist = get_the_term_list( $post->ID, 'illust_category', 'カテゴリー:', '、', '' );
if($taxolist):
?>
<dd><?php echo $taxolist; ?></dd>
<?php endif; ?>
<?php
$taxolist2 = get_the_term_list( $post->ID, 'illust_tag', 'タグ:', '、','' );
if($taxolist2):
?>
<dd><?php echo $taxolist2; ?></dd>
<?php endif; ?>


「出力結果」は、

  ↓

カテゴリー:食べ歩き タグ:ラーメン味噌市ヶ谷
のようになります。
(見た目のデザインは、スタイル定義によって変わります)


上記のコードは、出力したい部分例えば:single-llust.phparchive-illust.php など)に記述します。


007特定のカテゴリーの記事一覧(目次)をサイドバーに載せたい

●やりたいこと
右側のサイドバーに、「wordpress関連の記事 - 目次」という項目を設け、カテゴリーが「wordpress」の記事の一覧を表示させたい。


特定のカテゴリーの記事タイトル一覧をすべて表示する(サイドバーに「目次」をつけたい)

sidebar.php の表示させたい位置に、以下を挿入。

<!--特定のカテゴリー(wordpressのみ)の記事タイトル一覧をすべて表示する-->
<li><h3>wordpress関連の記事 - 目次</h3>
<?php
    $myQuery = new WP_Query(); // WP_Queryオブジェクト生成
    $param = array( //パラメータ。
		'cat' => '26', // カテゴリーID26の「wordpress」のみを表示。
        'posts_per_page' => '-1', //(整数)- 1ページに表示する記事数。-1 ならすべての投稿を取得。
        'post_status' => 'publish', //取得するステータスを指定:publish=公開済みのものだけ
        'orderby' => 'date', //並び替え引数。日付で並べる。
        'order' => 'asc' //昇順。古い記事が上。
    );
    $myQuery->query($param);  // クエリにパラメータを渡す
?>
<ul>
<?php if($myQuery->have_posts()): while($myQuery->have_posts()) : $myQuery->the_post(); ?>
        <li><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>の詳細へ">■<?php the_title(); ?></a></li>
<?php endwhile; endif; ?>
<?php wp_reset_query(); ?>
</ul>
</li>


これでうまくいきました。


「カテゴリーID」の調べ方

※「カテゴリーID」は、ダッシュボードの「カテゴリー」で追加したカテゴリ名の上にカーソルを乗せると(クリックせず、マウスONするだけ)、画面下に詳細が表示され、ID番号がわかります。

このIDは、サーバーの引越しをしたり、サイトを作り直したりすると、毎回変わるようなので、IDを再確認し、直す必要があります。